深度复制
  第9章通过下面的GetCopy()方法,介绍了如何使用受保护的方法System.Object.MemberwiseClone()进行浅度复制。
    public class Cloner
    {
        public int Val;
        public Cloner(int newVal)
        {
            Val = newVal;
        }
        public object GetCopy()
        {
            return MemberwishClone();
        }
    }
假定有引用类型的字段,而不是值类型的字段(例如,对象):
    public class Content
    {
        public int Val;
    }
    public class Cloner
    {
        public Content MyContent = new Content();
        public Cloner(int newVal)
        {
            MyContent.Val = newVal;
        }
        public object GetCopy()
        {
            return MemberwishClone();
        }
    }
  此时,通过GetCopy()得到的浅度复制包括一个字段,它引用的对象与源对象相同。以下代码使用这个Cloner类来说明浅度复制引用类型的结果:
    Cloner mySource = new Cloner(5);
    Cloner myTarget = (Cloner)mySource.GetCopy();
    Console.WriteLine("myTarget.MyContent.Val = {0}", myTarget.MyContent.Val);
    mySource.MyContent.Val = 2;
    Console.WriteLine("myTarget.MyContent.Val = {0}", myTarget.MyContent.Val);
  第4行把一个值赋给mySource.MyContent.Val,它是源对象中公共字段MyContent的公共字段Val。这也改变了myTarget.MyContent.Val的值。这是因为mySource.MyContent引用了与myTarget.MyContent相同的对象实例。上述代码的输出结果如下:
    myTarget.MyContent.Val = 5
    myTarget.MyContent.Val = 2